/* 导入工具包 */
// 导入express 并创建了express实例app
var app = require('express')();
// 导入express
var express = require('express');
// 导入内置http服务，使用app实例
var http = require('http').Server(app);
// 到scoket.io 启动scoket服务器
var io = require('socket.io')(http);

/* 启动web服务器，定义静态文件夹*/
// 访问/ 返回一段html文本
app.get('/', function(req, res){
	res.send('<h1>你好http</h1>');
});
// 使用静态目录public
app.use(express.static('public'))

// 定义所有的在线用户集合
var onlineUsers = {};
// 所有的在线用户数量
var onlineCount = 0;
/* 处理聊天信息 */
io.on('connection', function(socket){
	console.log('a user connected');
	
	// 当监听到用户的登录事件时候
	socket.on('login', function(obj){
		//动态scoket.name 为传入事件参数obj 的userid
		socket.name = obj.userid;
		// 如果当前用户不在 用户列表列表
		if(!onlineUsers.hasOwnProperty(obj.userid)) {
			// 添加当前用户到用户列表
			onlineUsers[obj.userid] = obj.username;
			// 数量加1
			onlineCount++;
		}
		// 发送一个登录事件，事件值为一个对象包含用户列表，和在新人数，当前用户
		io.emit('login', {onlineUsers:onlineUsers, onlineCount:onlineCount, user:obj});
		console.log(obj.username+'加入了聊天室');
	});
	
	// 当监听用户断开连接
	socket.on('disconnect', function(){
		// 如果有这个用户
		if(onlineUsers.hasOwnProperty(socket.name)) {
			var obj = {userid:socket.name, username:onlineUsers[socket.name]};
			// 移除用户列表
			delete onlineUsers[socket.name];
			// 用户总数量减一
			onlineCount--;
			// 发送注销事件 
			io.emit('logout', {onlineUsers:onlineUsers, onlineCount:onlineCount, user:obj});
			console.log(obj.username+'退出了聊天室');
		}
	});
	// 当监听用户发送message事件
	socket.on('message', function(obj){
		// 向所有用户发送message事件
		io.emit('message', obj);
		console.log(obj.username+'说：'+obj.content);
	});
  
});


/* 启动服务器 默认是5050端口 */
http.listen(process.env.PORT || 5050, function(){
	console.log('listening on *:5050');
});